The Universal Serial Bus Specifications are available at the following address www.usb.org. For instance USB 2.0 Specifications and USB 3.0 Specifications are available on this site. These documents define an industry-standard Universal Serial Bus and describe the bus attributes, the protocol definition, types of transactions, bus management, and the programming interface required to design and build systems and peripherals that are compliant with these standards.
The USB is a cable bus that supports data exchange between a host computer and a wide range of simultaneously accessible peripherals. The attached peripherals share USB bandwidth through a host-scheduled, token based protocol. The bus allows peripherals to be attached, configured, used, and detached while the host and other peripherals are in operation.
When a USB device is manufactured, it is needed to store static data or executable data into this device. For example initialization data, personalization data or firmware may be loaded into the device during a specific step called the programming step.
For performing the programming operations, it is known to use an additional connector dedicated to the programming step. Such a dedicated connector is distinct from the standard USB connector and is used for the programming operations only. A dedicated programming tool must be used for each kind of USB device. The dedicated programming tool depends on the type of the additional connector of the device to be programmed. Moreover, the dedicated connector may become hidden when the housing is placed on the device. In this case the programming step cannot be performed with a device whose manufacture is completed.
USB standards define a specific USB class of device which is dedicated to the programming operations. This specific USB class is named Device Firmware Upgrade (DFU). A device compliant with the DFU class comprises a download means which allows storing data in a programming mode. Unfortunately, the DFU mechanism requires a dedicated firmware is already loaded in the device.
There is a need for allowing the programming step of an empty USB device without using an additional connector dedicated to the programming step.